package cn.tedu.csmall.cart.webapi.controller;

import cn.tedu.csmall.cart.service.ICartService;
import cn.tedu.csmall.commons.pojo.cart.dto.CartAddDTO;
import cn.tedu.csmall.commons.restful.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/base/cart")
@Api(tags = "购物车管理")
public class CartController {
    @Autowired
    private ICartService cartService;

    @PostMapping("/add")
    @ApiOperation("新增购物车商品")
    public JsonResult cartAdd(CartAddDTO cartAddDTO){
        cartService.cartAdd(cartAddDTO);
        return JsonResult.ok("新增购物车商品完成!");
    }


    // 装配执行RestTemplate调用的方法
    @Autowired
    private RestTemplate restTemplate;

    @PostMapping("/delete")
    @ApiOperation("删除购物车商品")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户ID",name="userId",example = "UU100"),
            @ApiImplicitParam(value = "商品编号",name="commodityCode",
                                                            example = "PC100")
    })
    public JsonResult deleteUserCart(String userId,String commodityCode){

        // 我们设计在删除购物车信息前,先减少库存
        // 也就是先调用RestTemplate来减少库存
        String url="http://localhost:20003/base/stock/reduce/count?" +
                "commodityCode={1}&reduceCount={2}";
        // restTemplate对象发起调用
        // getForObject方法参数和返回值的解释:
        // 返回值:根据调用的控制器方法给定的返回值返回即可
        // 参数有3个部分
        // 1.第一个参数是url,指定要请求的路径
        // 2.第二个参数是一个反射,根据要返回类中编写即可
        // 3.从第三个参数开始,往后所有参数都是在给url路径中的{}占位符赋值
        //   第3个参数赋值给{1} 第4个参数赋值给{2}......
        JsonResult jsonResult=restTemplate.getForObject(url,
                JsonResult.class,commodityCode,5);
        System.out.println(jsonResult);


        cartService.deleteUserCart(userId,commodityCode);

        return JsonResult.ok("删除购物车商品完成!");
    }

}
